From 0fad7c81521a6052b5328c87f3c41e4e4d066c51 Mon Sep 17 00:00:00 2001 From: "emellor@leeni.uk.xensource.com" Date: Mon, 7 Nov 2005 12:28:53 +0100 Subject: [PATCH] Make xenstored reopen its trace file on SIGHUP. This allows one to rotate the logs beneath the daemon. Signed-off-by: Ewan Mellor --- tools/xenstore/xenstored_core.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 4dcdb52ef4..268e859108 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -56,6 +56,7 @@ extern int eventchn_fd; /* in xenstored_domain.c */ static bool verbose; LIST_HEAD(connections); static int tracefd = -1; +static char *tracefile = NULL; static TDB_CONTEXT *tdb_ctx; #ifdef TESTING @@ -242,6 +243,21 @@ void trace(const char *fmt, ...) talloc_free(str); } +void reopen_log() +{ + if (!tracefile) + return; + + if (tracefd > 0) + close(tracefd); + tracefd = open(tracefile, O_WRONLY|O_CREAT|O_APPEND, 0600); + if (tracefd < 0) { + perror("Could not open tracefile"); + return; + } + write(tracefd, "\n***\n", strlen("\n***\n")); +} + static bool write_messages(struct connection *conn) { int ret; @@ -1498,11 +1514,7 @@ int main(int argc, char *argv[]) outputpid = true; break; case 'T': - tracefd = open(optarg, O_WRONLY|O_CREAT|O_APPEND, 0600); - if (tracefd < 0) - barf_perror("Could not open tracefile %s", - optarg); - write(tracefd, "\n***\n", strlen("\n***\n")); + tracefile = optarg; break; case 'V': verbose = true; @@ -1512,6 +1524,8 @@ int main(int argc, char *argv[]) if (optind != argc) barf("%s: No arguments desired", argv[0]); + reopen_log(); + if (dofork) { openlog("xenstored", 0, LOG_DAEMON); daemonize(); @@ -1578,6 +1592,8 @@ int main(int argc, char *argv[]) close(STDERR_FILENO); } + signal(SIGHUP, reopen_log); + #ifdef TESTING signal(SIGUSR1, stop_failtest); #endif -- 2.30.2